文件读写测试,磁盘读写测试全靠它
来源:公众号【编程珠玑】
作者:守望先生
ID:shouwangxiansheng
有时候需要测试磁盘读写速度,或者临时读写文件,不想临时写代码?有没有测试使用的命令?当然有!
dd命令
dd命令可以用于文件的拷贝或者内容转换。常见操作选项如下:
bs=BYTES 一次读写字节数
ibs=BYTES 一次读的字节数
obs=BYTES 一次写的字节数
cbs=BYTES 一次转换的字节数
count=N 读写次数
of=FILE 将内容写到FILE,默认写入标准输出
if=FILE 从FILE中读取,默认从标准输入读取
conv=CONVS 转换标志
更多选项可查看man手册。
来看一些实例。
将文件的内容进行大小写转换
加入文件test.txt中有以下内容:
shouwangxiansheng
现在要将内容转换为大写:
$ dd if=test.txt of=utest.txt conv=ucase
0+1 records in
0+1 records out
18 bytes copied, 0.0123523 s, 1.5 kB/s
执行完成后,再看看utest.txt中的内容:
SHOUWANGXIANSHEN
看到没,已经将所有内容转换为大写了。
当然要达到这个目的有很多方法,比如要将test.txt内容的小写都转为大写,并且保存在utest.txt中。
$ cat test.txt | tr 'a-z' 'A-Z' > utest.txt
解释一下,conv=ucase,表示转换操作是转换为大写,你还可以使用:
lcase 转换为小写
ucase 转换为大写
swab 相邻字节交换
拷贝文件
例如将test.txt文件内容拷贝到test0.txt文件,每次拷贝1024字节:
$ dd if=test.txt of=test0.txt bs=1024
读取指定次数:
$ dd if=a of=b bs=1024 count=10 #读取10次
跳过指定块大小开始读取:
假设ibs=1,那么,每次读取1字节,而skip=4,则会从第五个字节开始读取:
dd if=test.txt of=test0.txt ibs=1 skip=4
得到内容:
$cat test0.txt
wangxiansheng
那如果要从指定位置开始写呢?
dd if=test.txt of=test0.txt obs=1 seek=5
这些写入的内容就会从test0.txt的第六个字节开始写,而会保留前面的5个字节。
注意,由于这里我设置了ibs或者obs为1,所以skip和seek的单位都是字节,但是如果前面设置的是如1M,那么跳过的就是N兆了。
生成随机文件
还记得在《Linux字符设备文件》中提到的特殊字符文件吗?结合dd命令,我们可以生成一些随机内容的文件。
$ dd if=/dev/urandom of=temp.txt count=2
执行之后就会读取2个块大小的数据到temp.txt中。
磁盘读写测试
由于dd命令每次执行完成后都会显示其速度,因此可以利用它来测试当前的磁盘读写情况。
这里还有一个选项oflag=FLAGS用来设置一些读写方式,FLAG常见选项有:
direct 使用直接IO
nonblock 使用非阻塞IO
noatime 不更新访问时间
nocache 丢弃缓存
sync 读写一次就写到磁盘
fsync 最后要写到磁盘
$ dd if=/dev/urandom of=testfile count=100 oflag=sync
100+0 records in
100+0 records out
51200 bytes (51 kB, 50 KiB) copied, 0.0011526 s, 44.4 MB/s
总结
dd命令可用于文件拷贝,文件内容大小写转换,磁盘读写测试等。
相关精彩推荐
关注公众号【编程珠玑】,获取更多Linux/C/C++/数据结构与算法/计算机基础/工具等原创技术文章。后台免费获取经典电子书和视频资源